home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / MKTIMSTR.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  5KB  |  155 lines

  1. static char mk_timestr_prog[] = "@(#)Zeit-String aus Sekunden oder Minuten bauen";
  2. static char mk_timestr_ver[]  = "@(#)v1.00/kr ; 10.06.91";
  3. /* Autor        Klaus Rath
  4. **
  5. ** Deklaration  char *mk_timestr(unsigned long min_sec, int toggle, int format);
  6. **
  7. ** Übergabe     Die Funktion erwartet einen UNSIGNED LONG-Wert min_sec, der
  8. **              entweder als Sekunden- oder als Minutenzahl interpretiert, je
  9. **              nach Setzung des Schalter-INT-Wertes toggle. Außerdem wird ein
  10. **              INT-Wert erwartet, der festlegt, in welchem Format der
  11. **              Zeitstring zurückgegeben werden soll.
  12. **              ( erlaubte Formate: siehe util.h ! )
  13. **
  14. ** Rückgabe     Es wird ein Zeiger auf ein CHAR-Array zurückgegeben, das von
  15. **              der aufrufenden Funktion per strcpy() in ein ausreichend
  16. **              dimensioniertes Array kopiert werden kann.
  17. **
  18. ** Anmerkungen  Die Funktion implementiert außerdem ein Format TI_MIN_SEC, das
  19. **              es erlaubt, den Wertebereich von min_sec ( LONG ! ) voll aus-
  20. **              zu nutzen. Es werden dann zusätzlich Tage vorangestellt.
  21. **              Mit der Schalterstellung 's' für Sekunden lassen sich damit
  22. **                 49,710 Tage ( entsprechend  136 Jahre) darstellen.
  23. **              Mit 'm' für Minuten vergrößert sich der Bereich auf ca.
  24. **              2,982,600 Tage ( entsprechend 8000 Jahre ).
  25. **
  26. ** Änderungen   1.00 ; 10.06.91
  27. **              - Erste Version
  28. */
  29.  
  30. #include <stdio.h>
  31. #include <string.h>
  32. #ifdef __TURBOC__
  33. #define ANSI
  34. #define MSDOS
  35. #include <stdlib.h>
  36. #endif
  37. #include "datum.h"
  38.  
  39. #ifdef ANSI
  40. char *mk_timestr(unsigned long min_sec, int toggle, int format)
  41. #else
  42. char *mk_timestr(min_sec, toggle, format)
  43. unsigned long min_sec;
  44. int toggle;
  45. int format;
  46. #endif
  47. {
  48.     /* Variablen definieren :
  49.     */
  50.     char zeit[30];
  51.     char tage_s[10];
  52.     char stunden_s[3];
  53.     char minuten_s[3];
  54.     char sekunden_s[3];
  55.     long tage,stunden,minuten,sekunden;
  56.  
  57.     /* Initialisieren :
  58.     */
  59.     zeit[0]   =
  60.     tage_s[0] = stunden_s[0] = minuten_s[0] = sekunden_s[0] = '\0';
  61.     tage      = stunden      = minuten      = sekunden      = 0L;
  62.  
  63.     /* Übernommenen Wert zerlegen :
  64.     ** ----------------------------
  65.     */
  66.     if ( toggle == 's' ) {                        /* Übernahme von Sekunden */
  67.         while ( min_sec > 86400 ) {
  68.             tage++;
  69.             min_sec -=86400;
  70.         }
  71.         while ( min_sec > 3600 ) {
  72.             stunden++;
  73.             min_sec -= 3600;
  74.         }
  75.         while ( min_sec > 60 ) {
  76.             minuten++;
  77.             min_sec -= 60;
  78.         }
  79.         sekunden = min_sec;
  80.     } /* if(toggle=='s') */
  81.  
  82.     else if ( toggle == 'm' ) {                    /* Übernahme von Minuten */
  83.         while ( min_sec > 1440 ) {
  84.             tage++;
  85.             min_sec -= 1440;
  86.         }
  87.         while ( min_sec > 60 ) {
  88.             stunden++;
  89.             min_sec -= 60;
  90.         }
  91.         minuten = min_sec;
  92.     }
  93.  
  94.     else                                    /* Nicht implementiert : Fehler */
  95.         return(NULL);
  96.     /* ENDE: Zerlegung */
  97.  
  98.     /* Umkopieren in Strings :
  99.     ** -----------------------
  100.     */
  101.     sprintf(tage_s,     "%ld",tage);
  102.     sprintf(stunden_s,  "%02d",stunden);
  103.     sprintf(minuten_s,  "%02d",minuten);
  104.     sprintf(sekunden_s, "%02d",sekunden);
  105.  
  106.     switch ( format ) {
  107.         case TI_HM_D :
  108.                  strcpy(zeit,stunden_s);
  109.                  strcat(zeit,":");
  110.                  strcat(zeit,minuten_s);
  111.                  break;
  112.         case TI_HMS_D :
  113.                  strcpy(zeit,stunden_s);
  114.                  strcat(zeit,":");
  115.                  strcat(zeit,minuten_s);
  116.                  strcat(zeit,":");
  117.                  strcat(zeit,sekunden_s);
  118.                  break;
  119.         case TI_HM_P :
  120.                  strcpy(zeit,stunden_s);
  121.                  strcat(zeit,".");
  122.                  strcat(zeit,minuten_s);
  123.                  break;
  124.         case TI_HMS_P :
  125.                  strcpy(zeit,stunden_s);
  126.                  strcat(zeit,".");
  127.                  strcat(zeit,minuten_s);
  128.                  strcat(zeit,".");
  129.                  strcat(zeit,sekunden_s);
  130.                  break;
  131.         case TI_HM_DB :
  132.                  strcpy(zeit,stunden_s);
  133.                  strcat(zeit,minuten_s);
  134.                  break;
  135.         case TI_HMS_DB :
  136.                  strcpy(zeit,stunden_s);
  137.                  strcat(zeit,minuten_s);
  138.                  strcat(zeit,sekunden_s);
  139.                  break;
  140.         case TI_MIN_SEC:
  141.                  strcpy(zeit,tage_s);
  142.                  strcat(zeit,":");
  143.                  strcat(zeit,stunden_s);
  144.                  strcat(zeit,":");
  145.                  strcat(zeit,minuten_s);
  146.                  strcat(zeit,":");
  147.                  strcat(zeit,sekunden_s);
  148.                  break;
  149.         default: return((char *)NULL);
  150.     } /* ENDE: switch(format) */
  151.  
  152.     return(zeit);
  153.  
  154. } /* ENDE: mk_timestr() */
  155.